home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / gemxx19.zoo / gem++19 / include / gemw.h < prev    next >
C/C++ Source or Header  |  1993-11-01  |  5KB  |  174 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  GEMwindow
  4. //
  5. //  A GEMwindow is a standard GEM window, which acts just like that as
  6. //  a base class.  Its contents is undefined, and redraw requests have
  7. //  no effect - derived classes should implement this.  It does, however,
  8. //  handle the requirement of clipping the redraw area - a standard
  9. //  requirement of GEM windows.
  10. //
  11. //  This file is Copyright 1992,1993 by Warwick W. Allison.
  12. //  This file is part of the gem++ library.
  13. //  You are free to copy and modify these sources, provided you acknowledge
  14. //  the origin by retaining this notice, and adhere to the conditions
  15. //  described in the file COPYING.LIB.
  16. //
  17. /////////////////////////////////////////////////////////////////////////////
  18.  
  19. #ifndef GEMw_h
  20. #define GEMw_h
  21.  
  22. #include <gemfb.h>
  23. #include <gempa.h>
  24. #include <grect.h>
  25. #include <gemfast.h>
  26. #include <bool.h>
  27.  
  28. class GEMactivity;
  29. class GEMevent;
  30.  
  31. class GEMwindow : public GEMpanarea
  32. {
  33. public:
  34.     GEMwindow(GEMactivity& in, int Parts);
  35.     GEMwindow(GEMactivity& in, int Parts, const GRect&);
  36.     GEMwindow(GEMactivity& in, int Parts, const GRect& actWorkArea, const GRect& maxWorkArea);
  37.     GEMwindow(const GEMwindow&);
  38.  
  39.     virtual ~GEMwindow();
  40.  
  41.     // some GEM like open and close functions
  42.     virtual bool Create();
  43.     virtual void Open();
  44.     virtual void Close();
  45.     virtual void Delete();
  46.  
  47.     // Accessory windows are closed "automatically".  Groan.  An accessory
  48.     // should call this method for all windows on an AC_CLOSE message.
  49.     virtual void BecomeDeleted();
  50.  
  51.     // discriminators and inquiring functions
  52.     virtual bool  IsOpen() const;
  53.     bool  IsCreated() const        { return created;        }
  54.     GRect BorderRect() const    { return Work2Win(Pos);    }
  55.     GRect WorkRect() const        { return Pos;            }
  56.  
  57.     // routines performing actions
  58.     virtual void Top(const GEMevent&);
  59.     virtual void Bottom(const GEMevent&);
  60.     virtual void Move(int X, int Y);
  61.     virtual void Resize(int w, int h);    // it's the border size
  62.     virtual GEMfeedback Click(const GEMevent&);
  63.  
  64.     // Top attempted by clicking at (x,y) - returns TRUE if actually topped.
  65.     // (rather than simply using the click)
  66.  
  67.  
  68.     void RedrawOverlaps(const GRect&); // Calls Redraw
  69.  
  70.     int Handle() const { return handle; }
  71.  
  72.     void Align(int x, int y, int xmult=8, int ymult=1);
  73.     // Movement will align such that (x,y) is a multiple of (xmult,ymult).
  74.  
  75.     virtual GEMfeedback UserClosed();
  76.     virtual void UserFulled();
  77.     virtual void UserResized(int w,int h);
  78.     virtual void UserMoved(int x, int y);
  79.     
  80.     // methods for the vertical slider
  81.     virtual void VSlidered(int newPos);
  82.     
  83.     // methods for the horizontal slider
  84.     virtual void HSlidered(int newPos);
  85.  
  86.     // Info-line
  87.     char *InfoText() const    { return info;    }
  88.     void SetInfoText(const char *);
  89.  
  90.     // Name (title)
  91.     void SetName(const char *);
  92.     const char *Name() const { return name;    }
  93.  
  94.     // Flush slider
  95.     virtual void Flush();
  96.  
  97.     // the Set* members flush their changes !
  98.     void SetVisibleLines(int noOfLines);
  99.     void SetTotalLines(int noOfLines);
  100.     void SetTopLine(int noOfLine);
  101.     void SetVisibleColumns(int noOfColumns);
  102.     void SetTotalColumns(int noOfColumns);
  103.     void SetLeftColumn(int noOfColumn);
  104.  
  105.     // Document units -> pixels
  106.     void LineHeight(int i) { lineHeight=i; }
  107.     void ColumnWidth(int i) { columnWidth=i; }
  108.     int LineHeight() { return lineHeight; }
  109.     int ColumnWidth() { return columnWidth; }
  110.  
  111.     // NB: "colour" is not strictly correct - see manual.
  112.     void SetPartColour(int part, short activecolour, short inactivecolour);
  113.     void DefaultPartColour(int part);
  114.  
  115.     // The GEMform MUST be of a special kind - see manual.
  116.     void SetPartColours(class GEMform& active, class GEMform& inactive);
  117.     void DefaultPartColours();
  118.  
  119.     short PartColour(int part, bool activecolour) const;
  120.  
  121.     int ButtonEventFlags(int flags);
  122.  
  123. protected:
  124.     int    parts;
  125.     bool initialized;
  126.     // characteristic rectangles, representing the work area
  127.     GRect Pos, Max; // Current and Full sizes
  128.  
  129.     // convert functions using the 'parts' member
  130.     GRect Win2Work(const GRect& outer) const;
  131.     GRect Work2Win(const GRect& work) const;
  132.  
  133.     virtual void Redraw(const GRect&);
  134.  
  135.     void SetBorderRect(const GRect&);
  136.     virtual void SetWorkRect(const GRect&);
  137.  
  138.     virtual bool ScrollByBlitting() const=0;
  139.  
  140.     void VCalculateGEMvalues();
  141.     void VCalculateValues();
  142.     virtual void VFlushSlider();
  143.     void HCalculateGEMvalues();
  144.     void HCalculateValues();
  145.     virtual void HFlushSlider();
  146.  
  147. private:
  148.     char *info;
  149.     GRect    storer;            // stores last actual size and pos. 
  150.     char *name;
  151.     int handle;
  152.         
  153.     bool opened, created;
  154.     GEMactivity* act;
  155.     int xoff,yoff,xalign,yalign;
  156.     short bevent;
  157.  
  158.     // parameters representing the real GEM slider
  159.     int    vSize,
  160.         vPosition;
  161.     int    hSize,
  162.         hPosition;
  163.  
  164.     // pixel size of document units
  165.     int lineHeight,columnWidth;
  166.  
  167.     void InActivity(GEMactivity& in);
  168.  
  169.     class GEMwPartCol* partcol;
  170. };
  171.  
  172.  
  173. #endif
  174.